#include "myLib.h"

SerialStringReceiver::SerialStringReceiver(int rxPin, int txPin) : ss(rxPin, txPin), lastReadTime(0), timeout(1000) {}

void SerialStringReceiver::begin(long speed)
{
    ss.begin(speed);
}

String SerialStringReceiver::readStringWithTimeout()
{
    buffer = "";             // 重置缓冲区
    lastReadTime = millis(); // 更新最后一次读取时间

    while (true)
    {
        if (ss.available() > 0)
        {
            char c = ss.read(); // 读取一个字符

            if (c == '\n' || c == '\r')
            {
                break; // 检测到结束符
            }

            buffer += c;             // 将字符添加到缓冲区
            lastReadTime = millis(); // 更新最后一次读取时间
        }
        else
        {
            // 检查是否超时
            if (millis() - lastReadTime > timeout)
            {
                break; // 超时处理
            }

            // 如果没有数据可读且未超时，则继续循环（实际上，由于read()是阻塞的，这行代码很少执行）
        }
    }

    return buffer; // 返回读取的字符串
}

// 注意：这里没有实现非阻塞读取或更复杂的超时处理逻辑
// 如果需要这些功能，您需要在readStringWithTimeout函数中添加额外的代码
